package edu.mju.interceptor;

import java.lang.reflect.Method;

/**
 *  自定义拦截器
 * @Author:wyp
 * @Date:2020/9/19 16:01
 */
public class MyInterceptor implements Interceptor{
    /**
     * 在真实对象前调用
     * @param proxyObject 代理对象
     * @param realObject 真实对象
     * @param method 方法
     * @param args 方法参数
     * @return true:反射真实对象的方法；false:调用around()方法
     */
    @Override
    public boolean before(Object proxyObject, Object realObject, Method method, Object[] args) {
        System.out.println("在真实对象前调用");
        return false;
    }

    /**
     * 在before()方法返回false时，调用该方法
     * @param proxyObject 代理对象
     * @param realObject 真实对象
     * @param method 方法
     * @param args 方法参数
     */
    @Override
    public void around(Object proxyObject, Object realObject, Method method, Object[] args) {
        System.out.println("反射方法后逻辑");
    }

    /**
     * 在反射真实对象方法或者around()方法执行之后，调用after()方法
     * @param proxyObject 代理对象
     * @param realObject 真实对象
     * @param method 方法
     * @param args 方法参数
     */
    @Override
    public void after(Object proxyObject, Object realObject, Method method, Object[] args) {
        System.out.println("在反射真实对象方法或者around()方法执行之后");
    }
}
